// JavaScript Document
/*
TODO:
  로컬스토리지 저장 목록
  - 최근 검색기록 
  - 관심품목 & 관련메모 : User Key가 동일한 경우 모든 웹브라우저 && 로그인 한 각 PC 마다 동기화 필수 
  - 광고내용 & 업체정보 : 웹소켓을 이용한 비동기 server-push 방식으로 저장 후 검색에 연동한 광고노출 또는 랜덤 노출


  초기화싯점에서 기능탐지, 브라우저탐지,.... (페이지수준으로 분기)
  자바스크립트 패턴  #인사이트 p.92
  
  자바스크립트 패턴  #인사이트 p.245
  var isIE = /*@cc_on!@/false;    // true 반환, 주의:@/ 사이에 * 추가할 것
  
  자바스크립트 완벽가이드 #인사이트 p.346, 347
  IE에서만 실행되는 자바스크립트 조건부 주석
  /*@cc_on
  @if(@_jscript)          //  @_jscript는 마이크로소프트의 자바스크립트 인터프리터 이름
  
  	alert('IE');
  	
	
  @end
  @/           // 주의:@/ 사이에 * 추가할 것
  
//***************
추가 데이터전달   
자바스크립트 객체지향프로그래밍 #위키북스 p.344
1.	$('p').bind('click', {foo: 'bar'}, handler);
	function handler(e) {
		alert(e.data.foo);
	}
자바스크립트 객체지향프로그래밍 #위키북스 p.
2.	$('p').load(url, {foo: 'bar'}, callback);
    

//***************
자바스크립트 패턴  #인사이트 p.92
function func(p, q) {
	console.log('argument.length: ' + arguments.length);
	console.log('func.length:'      + func.length);
}

func('p', 'q', 'r');    // func.length:2 , argument.length: 3 
func('p');              // func.length:2 , argument.length: 1 
//*************
	
/**/

$(document).ready(function() {
	
	var storage = null,
	    SERVICE_NAME = null,   // 퍼펙트자바스크립트 #위키북스  p.486 p.487   localStorage 네임스페이스 관리	
	 	support_stroage = window.localStorage || window.sessionStorage;	    //  window['localStorage']  

/*
    if(support_stroage) {
		alert('지원');	
	} else {
		alert('No!!');	
	}
*/

		
	window.onload = function() {
		try {    
			storage = JSON.parse(localStorage.SERVICE_NAME || '{}'); 
		} catch(e) {
			storage = {};
		}		
		
		if(support_stroage) {			// 꼭 필요한 HTML5 그리고 HTML5 API #puple p.242
			if(!localStorage.version) {
				localStorage.version = '1.0';
			}		
		
			Storage.prototype.setObject = function(key, value) {
				
			//		storage[key] = value;
		//		localStorage.SERVICE_NAME = JSON.stringify(storage);
				
		//		this.setItem(localStorage.SERVICE_NAME, JSON.stringify(storage));
				
			this.setItem(key, JSON.stringify(value));
			}
			
			Storage.prototype.getObject = function(key, value) {
				return this.getItem(key) && JSON.parse(this.getItem(key));
			}
		}		
	};	
	
	window.onbeforeunload = function() {
		localStorage.SERVICE_NAME = JSON.stringify(storage);
	};

	window.onstorage  = function(e) {
		if(e.key === (SERVICE_NAME && e.newValue)) {
			storage = JSON.parse(e.newValue);
		}
	};



/*			
	function setStorage(key, value) {
		storage[key] = value;
		localStorage.SERVICE_NAME = JSON.stringify(storage);
	}
	
		
/**/		

	

	
	
	
	
	
	var printMessage = function(msg) {
			$('#noti').append('<p>' + msg + '</p>');
		}	
	
	var socket = io.connect('http://localhost:52273');
	 
	socket.on('news', function (data) {
		log(data.hello);
		socket.emit('my other event', { my: 'data' });
	});
	
	socket.on('co', function (data) {
	//	alert('data: ' + data);
		log('data: ' + data);
	});
	
	socket.on('connect', function () {
		printMessage('서버의 소켓에 연결되었습니다.');		// 클라이언트에 출력
		socket.send('클라이언트에서 보내는 메시지');  		// 서버에 출력
	});	
	
	socket.on('message', function (msg) {		
		printMessage(msg);
//		log(msg);
	});		

	socket.on('msg', function (data) {
		printMessage(data.msg + ' : ' + data.now);
	});		





/*	
    // 예약이벤트 : message, connect, disconnect, open, close, error, retry, reconnect
	
    // json 객체 전송시
	socket.emit('message', {msg: '문자열'})
	socket.json.send({msg: '문자열'});    
	
	// json 객체 수신시     
	socket.on('message', function (data) { console.log(data.msg);});   
/**/	
	
/*  
  ////****************************	
  var support_socket = !!window.WebSocket;  
  
	if(support_socket) {
		var url = 'ws://localhost:8080/';
		
		var socket = (window.MozWebsocket) ?  new MozWebsocket(url) : new WebSocket(url);
	//  var socket = new WebSocket(url);

		if(socket) {
			log('소켓 지원');
		}
	
		socket.onopen = function() {
			log('open');
			socket.send('socket open');  
		}

		socket.send = function(s) {
			log(s);
			
		}	
		
		socket.send('Socket Test');

		socket.onmessage = function(e) {
			log('서버로 부터 받은 메시지: ' + e.data);
		}
		
		socket.onclose = function(e) {
			log('closed');
		}
				

	} else {
		alert('소켓 지원 불가');	
	}
	
	/**/	
	
	

	$('dd a', '#searchResult').live({       // 주의: jquery.1.8이하에서 live 사용   
		click: function(e) {
			var serial	= $(this).data('serial') || $(this).attr('data-serial') || $(this).dataset.serial,
				supl 	= /^s\d{5}/,
				prt 	= /^p\d{5}/;
			
				
			
			$('#loadingImg').removeClass('hidden');			
			e.preventDefault();
						
			/*@cc_on          // IE
			@if(@_jscript)			
	
	//			$(this).after().load($(this).attr('href') '#site_content');
			 
			@else*/
			 
	//		    $('#site_content').load($(this).attr('href') + ' #site_content');
				
		   /*@end	
			@*/ 
		
	        $('#site_content').load($(this).attr('href') + ' #site_content');
			
			
			if(support_stroage && !!supl.test(serial)) {	
			
	//			SERVICE_NAME = 'SUP';
	
	//			localStorage.setObject(SERVICE_NAME, time.unix_timestamp());	
				localStorage.setObject(serial, time.unix_timestamp());	
				
	//			localStorage.clear();		
			}
		
		   $('#loadingImg').addClass('hidden');
		   
		}
		
/*		
		mouseover: function() {    // TODO:  관심품목 등록, 메모 작성메뉴를 이곳에???
			
		},
		mouseout: function() {
			
		},
		contextmenu: function(e) {   // TODO: 비즈메뉴(광고등록)를 이곳에???  비즈회원에게만 조건부 활성화?
			alert('assa!!');	
			e.preventDefault();
		},
		
/**/		
	});

	$('#makerPool span a').live({       // 주의: live 사용 
		click: function(e) {
			e.preventDefault();
			var href 	= e.target.href.split('#'),
				waitingAd = "<img src='http://placehold.it/200x100' /><br /> 이곳은 광고 영역입니다.<br /> mouseover시 우측에 광고박스 표시합니다.";
			
			$('#showChoice').empty();	    
			$('dl').addClass('hidden');	   
			$('#'+href[1]).closest('dl').clone(true)
				.appendTo('#showChoice')
				.removeClass('hidden');
			$('#showChoice').append(waitingAd); 	
		}
	});


});




